package model

import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
import exceptions.EmpresaAnonimaException
import exceptions.FichaInexistenteException
import exceptions.FichaYaExisteException
import traits.OperacionesCenso

class EmpresaRegular(val _departamento: Departamento,
  val _fuente: Fuente,
  var _nombreEmpresa: String,
  val _fichasE: ArrayBuffer[FichaEmpresa] = new ArrayBuffer[FichaEmpresa]) extends OperacionesCenso {

  def fichasE = _fichasE

  def departamento = _departamento

  def fuente = _fuente

  //	Si la ficha pasada por parametro tiene el mismo año que una de las fichas
  //	de la empresa, larga una excepcion, sino, la agrega a la coleccion.
  def agregarFicha(fichaNueva: FichaEmpresa): Unit = {
    fichasE.exists({ f => f.año.equals(fichaNueva.año) }) match {
      case true => throw new FichaYaExisteException("Ya hay una ficha para ese año")
      case false => fichasE += fichaNueva
    }
  }

  def getMacroFicha(años : ArrayBuffer[Int]) : MacroFicha = {
		val fichas =  fichasE.filter( {e => años.contains(e.año)} )
		new MacroFicha(años, fichas.map(_.montoVentas).sum,fichas.map(_.montoGanancias).sum)
  } 
  
  //      Devuelve la ficha que corresponda al año pasado por parametro
  def getFichaByYear(año: Int): FichaEmpresa = {
    this.fichasE.find({ ficha => ficha.año.equals(año) }).get
  }

  def nombre = _nombreEmpresa

  def esSolida(): Boolean = {
    fichasE.forall(_.tasaGanancia > 10)
  }

  def esSospechosa(): Boolean = {
    fichasE.exists(_.tasaGanancia > 85)
  }

  override def fichasAnonimasFiltradas(): ArrayBuffer[FichaAnonima] = {
    new ArrayBuffer[FichaAnonima]
  }

  def empresasFiltradas(): ArrayBuffer[EmpresaRegular] = {
    new ArrayBuffer[EmpresaRegular] += this
  }
  
   override def fichasDeEmpresas(): ArrayBuffer[FichaEmpresa] = {
		 this.fichasE
   }

  override def empresasConVentasMayoresA(monto: Double): ArrayBuffer[String] = {
    throw new UnsupportedOperationException("Esta operacion no es soportada por empresas")
  }

  override def empresasMaxGanancias(): String = {
    throw new UnsupportedOperationException("Esta operacion no es soportada por empresas")
  }

  override def fuentesQueAportaronAlMenosUnaFicha(): ArrayBuffer[String] = {
    throw new UnsupportedOperationException("Esta operacion no es soportada por empresas")
  }

  override def createMapByProvincia(): Map[String, Double] = {
    throw new UnsupportedOperationException("Esta operacion no es soportada por empresas")
  }

}

